package votaciones;

import java.util.*;

import usuarios.Usuario;

public class Votacion {

	private String nombre;
	private Date fecha;
	private LinkedList preguntas;
	private TreeMap<Usuario, int[]> respuestas;
	private Date caducidad;
	private int[] resultados;
	private Tvotacion TipoVotacion;
	private IAplicaResultado aplicaResultado;

	public Votacion(String nombre, Date fecha, LinkedList preguntas,
			Date caducidad, Tvotacion tv) {

		this.nombre = nombre;
		this.fecha = fecha;
		this.preguntas = preguntas;
		int aux[] = new int [preguntas.size()];
		this.respuestas = new TreeMap<Usuario,int[]>();
		this.caducidad = caducidad;
		this.resultados = new int [preguntas.size()];
		this.TipoVotacion = tv;
		setTipoAplica(tv);
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public LinkedList getPreguntas() {
		return preguntas;
	}

	public void setPreguntas(LinkedList preguntas) {
		this.preguntas = preguntas;
	}

	public TreeMap<Usuario, int[]> getRespuestas() {
		return respuestas;
	}

	public void setRespuestas(TreeMap<Usuario, int[]> respuestas) {
		this.respuestas = respuestas;
	}

	public Date getCaducidad() {
		return caducidad;
	}

	public void setCaducidad(Date caducidad) {
		this.caducidad = caducidad;
	}

	public int[] getResultados() {
		return resultados;
	}

	public void setResultados(int[] resultados) {
		this.resultados = resultados;
	}

	public void calculaResultados() {// Este metodo recorre todo el mapa de
										// respuestas contando los resultados
		int[] aux;

		for (int i = 0; i <= respuestas.size(); i++) {
			aux = respuestas.get(i);

			for (int j = 0; j <= aux.length; j++) {
				resultados[j] = resultados[j] + aux[j];// Dani pon aqui el
														// criterio que
														// consideres mas
														// adecuado, yo he
														// colocado la suma para
														// obtener un total de
														// votos

			}

		}

	}

	public void addRespuestas(Usuario usr, int[] res) {
		respuestas.put(usr, res);

	}

	public Tvotacion getTipoVotacion() {
		return TipoVotacion;
	}

	public IAplicaResultado getAplicaResultado() {
		return aplicaResultado;
	}

	public void setTipoAplica(Tvotacion tv) {
		aplicaResultado = new FabAppRes().createAppRes(tv);

	}

	public void performAplica() {
		aplicaResultado.aplica(preguntas, resultados);
	}
}
